package com.yfp.operation.mapper;

import com.yfp.common.datascope.annotation.DataScope;
import com.yfp.operation.domain.MarAssociation;
import com.yfp.operation.domain.dto.AssociationDTO;
import com.yfp.operation.domain.vo.AssociationVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;

/**
 * @Description: 社群
 *
 * @CreateDate: 2024/7/5 13:59
 * @UpdateUser:
 * @UpdateDate: 2024/7/5 13:59
 * @UpdateRemark: 暂无修改
 * @Version: 1.0
 */
@Mapper
public interface MarAssociationMapper {
    /**
     * 查询
     * @param id
     * @return
     */
    MarAssociation getById(Long id);

    /**
     * 查询
     * @param groupChatId
     * @return
     */
    MarAssociation findByGroupChatId(String groupChatId);

    /**
     * 查询列表
     * @param marAssociation
     * @return
     */
    List<MarAssociation> findList(MarAssociation marAssociation);

    /**
     * 新增
     * @param marAssociation
     */
    void add(MarAssociation marAssociation);

    /**
     * 编辑
     * @param marAssociation
     */
    void edit(MarAssociation marAssociation);

    /**
     * 置空微信群
     * @param id
     */
    void editGroupChatIdNull(Long id);

    /**
     * 根据群名称模糊查询
     * @param groupChatName
     * @return
     */
    List<MarAssociation> findByGroupChatNameLike(String groupChatName);

    /**
     * 根据点位ID查询
     * @param positionId
     * @return
     */
    List<MarAssociation> findByPositionId(String positionId);

    /**
     * 社群数据明细列表
     * @param associationDTO
     * @return
     */
//    @DataScope(deptAlias = "ar,ro,po,ma")
    List<AssociationVO> associationDataInfo(AssociationDTO associationDTO);

    /**
     * 点位下单用户数
     * @param associationDTO
     * @return
     */
    List<AssociationVO> purchaseClientNum(AssociationDTO associationDTO);

    /**
     * 复购数
     * @return
     */
    List<AssociationVO> repeatedlyBuyNum(@Param("positionIds") List<String> positionIds, @Param("startTime") Date startTime, @Param("endTime") Date endTime, @Param("num") Integer num);

    /**
     * 购买单数
     */
    List<AssociationVO> purchaseNum(@Param("positionIds") List<String> positionIds, @Param("startTime") Date startTime, @Param("endTime") Date endTime, @Param("num") Integer num,@Param("payStatus") Integer payStatus);

    List<AssociationVO> positionAssociation(AssociationDTO associationDTO);

    /**
     * 运营前三天用户数
     * @param associationDTO
     * @return
     */
    Integer getClientNum(AssociationDTO associationDTO);

    /**
     * 下单新用户数量
     * @param groupChatIds
     * @param startTime
     * @param endTime
     * @return
     */
    List<AssociationVO> getBuyNewClientNum(@Param("groupChatIds") List<String> groupChatIds, @Param("startTime") Date startTime, @Param("endTime")Date endTime);

    /**
     * 成员数量
     * @return
     */
    List<AssociationVO> getMemberNum();

    /**
     * 点位群成员
     * @return
     */
    List<AssociationVO> getPositionMemberNum(AssociationDTO associationDTO);


    /**
     * 群成员
     * @param groupChatIds
     * @return
     */
    List<AssociationVO> getGroupChatIdsMemberNum(@Param("groupChatIds") List<String> groupChatIds, @Param("endTime") Date endTime);

}